﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Jardin_Informativo_Agua_Tierra
{
    public partial class AutorizadosRetiro : Form
    {
        public AutorizadosRetiro()
        {
            InitializeComponent();
        }
        JardinInformativoBDEntities BEDE = new JardinInformativoBDEntities();
        Generador g = new Generador();
        Validacion v = new Validacion();
        IEnumerable<Autorizado_Retiro> ListaRetiradores;
        IEnumerable<Retiro> ListaRetiros;

        private void AutorizadosRetiro_Load(object sender, EventArgs e)
        {
            lbl_NiñoAsociado.Text = "";
            btn_Eliminar.Enabled = false;
        }

        int valnombreretiro;
        int valapellidopretiro;
        int valapellidomretiro;
        int valrutretiro;
        int valceluretiro;
        int valrelacionretiro;
        int valnombretransporteescolar;
        int valtipolicencia;
        int valnombreacompañante;
        int valapellidoacompañante;

        int retiradoryaexiste;
        int seencontroniño;

        int ficha;

        public void LlenarRetirantes(int b)
        {
            ListaRetiros = BEDE.Retiro.OrderBy(c => c.id_retiro);
            ListaRetiradores = BEDE.Autorizado_Retiro.OrderBy(c => c.rut);
            foreach (Retiro aux in ListaRetiros)
            {
                if (aux.cod_fichaniño == b)
                {
                    dgv_AutorizadosRetiro.Rows.Add(aux.Autorizado_Retiro.rut.ToString(), aux.Autorizado_Retiro.nombre.ToString(), aux.Autorizado_Retiro.relacion.ToString());
                }
            }

        }

        private void cbx_RelacionRetiro_SelectedValueChanged(object sender, EventArgs e)
        {
            if(cbx_RelacionRetiro.Text == "TRANSPORTE ESCOLAR")
            {
                panel4.Visible = true;
                btn_AñadirRetiro.Location = new Point(375, 379);
            }
            else
            {
                panel4.Visible = false;
                btn_AñadirRetiro.Location = new Point(375, 270);
                cbx_TipoLicencia.SelectedIndex = -1;
                tbx_TransporteEscolar.Clear();
                tbx_NombreAcompañante.Clear();
                tbx_ApellidoAcompañante.Clear();
            }
        }

        private void tbx_RutNiño_TextChanged(object sender, EventArgs e)
        {
            if (tbx_RutNiño.Text.Length > 7)
            {
                int b = g.GenCodFicha(tbx_RutNiño.Text);
                try
                {
                    Parvulo aux = BEDE.Parvulo.Single(c => c.folio_ficha == b);
                    if(aux.rut_niño == int.Parse(tbx_RutNiño.Text.ToString()))
                    {
                        LlenarRetirantes(b);
                        lbl_NiñoAsociado.Text = aux.nombre.Replace("·", " ").ToString().ToUpperInvariant();
                        lbl_NiñoAsociado.ForeColor = Color.LimeGreen;
                        ficha = b;
                        seencontroniño = 1;
                    }
                    else { Convert.ToInt32("solo para romper el try"); dgv_AutorizadosRetiro.Rows.Clear(); btn_Eliminar.Enabled = false; }
                }
                catch { lbl_NiñoAsociado.Text = "No se encuentra ningun niño con el rut\nseñalado, en la base de datos."; lbl_NiñoAsociado.ForeColor = Color.Red; tbx_RutNiño.Focus(); dgv_AutorizadosRetiro.Rows.Clear(); seencontroniño = 0; }
            }
            else { lbl_NiñoAsociado.Text = ""; seencontroniño = 0; dgv_AutorizadosRetiro.Rows.Clear(); btn_Eliminar.Enabled = false; }
        }

        private void tbx_NombreRetiro_Leave(object sender, EventArgs e)
        {
            tbx_NombreRetiro.Text = tbx_NombreRetiro.Text.Trim();
            valnombreretiro = v.ValidarTextos(tbx_NombreRetiro.Text);
            if (valnombreretiro == 0) { errorProvider1.SetError(lbl_NombreRetiro, "Este campo solo puede contener letras de la A a la Z y espacios.\nEste campo no puede quedar vacío."); }
            else { errorProvider1.SetError(lbl_NombreRetiro, ""); }
        }

        private void tbx_ApellidoPRetiro_Leave(object sender, EventArgs e)
        {
            tbx_ApellidoPRetiro.Text = tbx_ApellidoPRetiro.Text.Trim();
            valapellidopretiro = v.ValidarTextos(tbx_ApellidoPRetiro.Text);
            if (valapellidopretiro == 0) { errorProvider1.SetError(lbl_ApellidoPRetiro, "Este campo solo puede contener letras de la A a la Z y espacios.\nEste campo no puede quedar vacío."); }
            else { errorProvider1.SetError(lbl_ApellidoPRetiro, ""); }
        }

        private void tbx_ApellidoMRetiro_Leave(object sender, EventArgs e)
        {
            tbx_ApellidoMRetiro.Text = tbx_ApellidoMRetiro.Text.Trim();
            valapellidomretiro = v.ValidarTextos(tbx_ApellidoMRetiro.Text);
            if (valapellidomretiro == 0) { errorProvider1.SetError(lbl_ApellidoMRetiro, "Este campo solo puede contener letras de la A a la Z y espacios.\nEste campo no puede quedar vacío."); }
            else { errorProvider1.SetError(lbl_ApellidoMRetiro, ""); }
        }

        private void tbx_DigitoRetiro_Leave(object sender, EventArgs e)
        {
            tbx_DigitoRetiro.Text = tbx_DigitoRetiro.Text.Trim();
            valrutretiro = v.ValidarRut(tbx_RutRetiro.Text, tbx_DigitoRetiro.Text);
            if (valrutretiro == 0) { errorProvider1.SetError(lbl_RutRetiro, "El RUT ingresado es incorrecto."); }
            else { errorProvider1.SetError(lbl_RutRetiro, ""); }
        }

        private void tbx_CeluRetiro_Leave(object sender, EventArgs e)
        {
            tbx_CeluRetiro.Text = tbx_CeluRetiro.Text.Trim();
            valceluretiro = v.ValidarFono(tbx_CeluRetiro.Text);
            if (valceluretiro == 0) { errorProvider1.SetError(lbl_CeluRetiro, "El numero ingresado es incorrecto. (Los numeros de celurar deben comensar con 9, 8, 7 o 6)."); }
            else { errorProvider1.SetError(lbl_CeluRetiro, ""); }
        }

        private void cbx_RelacionRetiro_Leave(object sender, EventArgs e)
        {
            valrelacionretiro = v.ValidarCombobox(cbx_RelacionRetiro.Text);
            if (valrelacionretiro == 0) { errorProvider1.SetError(lbl_RelacionRetiro, "Debe seleccionar una relacion con el niño."); }
            else { errorProvider1.SetError(lbl_RelacionRetiro, ""); }
        }

        private void tbx_TransporteEscolar_Leave(object sender, EventArgs e)
        {
            tbx_TransporteEscolar.Text = tbx_TransporteEscolar.Text.Trim();
            valnombretransporteescolar = v.ValidarTextos(tbx_TransporteEscolar.Text);
            if (valnombretransporteescolar == 0) { errorProvider1.SetError(lbl_TransporteEscolar, "Este campo solo puede contener letras de la A a la Z y espacios.\nEste campo no puede quedar vacío."); }
            else { errorProvider1.SetError(lbl_TransporteEscolar, ""); }
        }

        private void cbx_TipoLicencia_Leave(object sender, EventArgs e)
        {
            valtipolicencia = v.ValidarCombobox(cbx_TipoLicencia.Text);
            if (valtipolicencia == 0) { errorProvider1.SetError(lbl_TipoLicencia, "Debe seleccionar un tipo de Licencia."); }
            else { errorProvider1.SetError(lbl_TipoLicencia, ""); }
        }

        private void tbx_NombreAcompañante_Leave(object sender, EventArgs e)
        {
            tbx_NombreAcompañante.Text = tbx_NombreAcompañante.Text.Trim();
            valnombreacompañante = v.ValidarTextos(tbx_NombreAcompañante.Text);
            if (valnombreacompañante == 0) { errorProvider1.SetError(lbl_NombreAcompañante, "Este campo solo puede contener letras de la A a la Z y espacios.\nEste campo no puede quedar vacío."); }
            else { errorProvider1.SetError(lbl_NombreAcompañante, ""); }
        }

        private void tbx_ApellidoAcompañante_Leave(object sender, EventArgs e)
        {
            tbx_ApellidoAcompañante.Text = tbx_ApellidoAcompañante.Text.Trim();
            valapellidoacompañante = v.ValidarTextos(tbx_ApellidoAcompañante.Text);
            if (valapellidoacompañante == 0) { errorProvider1.SetError(lbl_NombreAcompañante, "Este campo solo puede contener letras de la A a la Z y espacios.\nEste campo no puede quedar vacío."); }
            else { errorProvider1.SetError(lbl_ApellidoAcompañante, ""); }
        }

        private void btn_AñadirRetiro_Click(object sender, EventArgs e)
        {
            tbx_RutNiño.Focus();
            tbx_NombreRetiro.Focus();
            tbx_ApellidoPRetiro.Focus();
            tbx_ApellidoMRetiro.Focus();
            tbx_DigitoRetiro.Focus();
            tbx_CeluRetiro.Focus();
            cbx_RelacionRetiro.Focus();
            if (cbx_RelacionRetiro.Text == "TRANSPORTE ESCOLAR")
            {
                tbx_TransporteEscolar.Focus();
                cbx_TipoLicencia.Focus();
                tbx_NombreAcompañante.Focus();
                tbx_ApellidoAcompañante.Focus();
                valrelacionretiro = 1;
            }
            else
            {
                valnombreacompañante = 1;
                errorProvider1.SetError(lbl_NombreAcompañante, "");
                valapellidoacompañante = 1;
                valnombretransporteescolar = 1;
                valtipolicencia = 1;
            }
            btn_AñadirRetiro.Focus();
            int validar = valnombreretiro * valapellidopretiro * valapellidomretiro * valrutretiro * valceluretiro * valrelacionretiro * valnombretransporteescolar * valtipolicencia * valnombreacompañante * valapellidoacompañante;
            if (validar == 0)
            {
                MessageBox.Show("No se puede almacenar el registro, pues existen datos incorrectos.\nRevise los campos señalados.", "ERROR EN LOS DATOS.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                string mensaje = "Valores :\n\n" + "ValRutRetiro = " + valrutretiro.ToString() + "\nValNombreRetiro = " + valnombreretiro.ToString() + "\nValApellidoPRetiro = " + valapellidopretiro.ToString() + "\nValApellidoMRetiro = " + valapellidomretiro.ToString() + "\nValCeluRetiro = " + valceluretiro.ToString() + "\nValRelacionRetiro = " + valrelacionretiro.ToString() + "\nValNombreTransporte = " + valnombretransporteescolar.ToString() + "\nValTipoLicencia = " + valtipolicencia.ToString() + "\nValNombreAcompañante = " + valnombreacompañante.ToString() + "\nValApellidoAcompañante = " + valapellidoacompañante.ToString();
                MessageBox.Show(mensaje, "datos", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                if (seencontroniño == 0)
                {
                    MessageBox.Show("No se puede almacenar el registro, pues el parvulo al que\nse intenta asociar no se encuentra registrado.", "ERROR RELACIONAL DE DATOS.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    int a = ficha;
                    int idretiro = g.GenIDRetiro(a, int.Parse(tbx_RutRetiro.Text));
                    int seguir = v.ComprobarRetiro(idretiro);
                    if (seguir == 0)
                    {
                        MessageBox.Show("La autorización de retiro que desea registrar ya\nha sido registrada anteriormente. por favor revise la lista\nde autorizaciones, y corrobore la informacion.", "ERROR DE CONSISTENCIA DE DATOS.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    else
                    {
                        if (retiradoryaexiste == 0)
                        {
                            Autorizado_Retiro AR = new Autorizado_Retiro();
                            AR.rut = int.Parse(tbx_RutRetiro.Text);
                            AR.nombre = tbx_NombreRetiro.Text.Replace(" ", "·") + " " + tbx_ApellidoPRetiro.Text.Replace(" ", "·") + " " + tbx_ApellidoMRetiro.Text.Replace(" ", "·");
                            AR.fono = int.Parse(tbx_CeluRetiro.Text);
                            AR.relacion = cbx_RelacionRetiro.Text;
                            if (AR.relacion == "TRANSPORTE ESCOLAR")
                            {
                                AR.nombreacompañante = tbx_NombreAcompañante.Text.Replace(" ", "·") + " " + tbx_ApellidoAcompañante.Text.Replace(" ", "·");
                                AR.tipo_licencia = cbx_TipoLicencia.Text;
                                AR.transporte_escolar = tbx_TransporteEscolar.Text;
                            }
                            else
                            {
                                AR.nombreacompañante = " ";
                                AR.tipo_licencia = " ";
                                AR.transporte_escolar = " ";
                            }
                        }
                        Retiro R = new Retiro();
                        R.id_retiro = idretiro;
                        R.año = DateTime.Now.Year;
                        R.rut_autorizado = int.Parse(tbx_RutRetiro.Text);
                        R.cod_fichaniño = g.GenCodFicha(tbx_RutNiño.Text);
                        BEDE.Retiro.AddObject(R);
                        BEDE.SaveChanges();   // REVISA ESTO REVISA ESTO REVISA ESTO REVISA ESTO REVISA ESTO
                    }
                }
            }
        }

        private void tbx_RutRetiro_TextChanged(object sender, EventArgs e)
        {
            if (tbx_RutRetiro.Text.Length > 6)
            {
                try
                {
                    int a =int.Parse(tbx_RutRetiro.Text);
                    Autorizado_Retiro X = BEDE.Autorizado_Retiro.Single(c => c.rut == a);
                    tbx_DigitoRetiro.Clear();
                    tbx_DigitoRetiro.Enabled = false;
                    valrutretiro = 1;
                    int b = 0;
                    string[] datos = X.nombre.Split(' ');
                    foreach (string algo in datos)
                    {
                        if (b == 2) { tbx_ApellidoMRetiro.Text = algo.ToString().Replace("·"," "); tbx_ApellidoMRetiro.Enabled = false; valapellidomretiro = 1; }
                        if (b == 1) { tbx_ApellidoPRetiro.Text = algo.ToString().Replace("·"," "); b++; tbx_ApellidoPRetiro.Enabled = false; valapellidopretiro = 1; }
                        if (b == 0) { tbx_NombreRetiro.Text = algo.ToString().Replace("·"," "); b++; tbx_NombreRetiro.Enabled = false; valnombreretiro = 1; }
                    }
                    tbx_CeluRetiro.Text = X.fono.ToString();
                    tbx_CeluRetiro.Enabled = false; valceluretiro = 1;
                    cbx_RelacionRetiro.Focus();
                    retiradoryaexiste = 1;
                }
                catch 
                {
                    tbx_DigitoRetiro.Enabled = true;
                    tbx_DigitoRetiro.Clear();
                    tbx_NombreRetiro.Enabled = true;
                    tbx_NombreRetiro.Clear();
                    tbx_ApellidoPRetiro.Enabled = true;
                    tbx_ApellidoPRetiro.Clear();
                    tbx_ApellidoMRetiro.Enabled = true;
                    tbx_ApellidoMRetiro.Clear();
                    tbx_CeluRetiro.Enabled = true;
                    tbx_CeluRetiro.Clear();
                    retiradoryaexiste = 0;
                }
            }
        }

        private void dgv_AutorizadosRetiro_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            btn_Eliminar.Enabled = true;
        }

        private void btn_Eliminar_Click(object sender, EventArgs e)
        {
            int rut = int.Parse(dgv_AutorizadosRetiro.CurrentRow.Cells[0].Value.ToString());
            int seguir = v.ComprobarEliminacionRetirante(rut);
            if (seguir == 0) // el autorizado para retirar a este niño tambien puede retirar a otros niños... solo se elimina el permiso de retiro, pero no el autorizado...
            {
                if (MessageBox.Show("El autorizado a retiro que desea eliminar se encuentra asociado\nal retiro de otros párvulos, por lo que\nse eliminará unicamente la autorizacion.\n\n¿Desea continuar con la eliminación del registro señalado?", "ELIMINAR REGISTRO", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    int a = g.GenIDRetiro(int.Parse(tbx_RutNiño.Text), rut);
                    Retiro aux = BEDE.Retiro.Single(c => c.id_retiro == a);
                    BEDE.Retiro.DeleteObject(aux);
                    BEDE.SaveChanges();
                    int b = g.GenCodFicha(tbx_RutNiño.Text);
                    LlenarRetirantes(b);
                    MessageBox.Show("El registro indicado fue eliminado correctamente del sistema.", "REGISTRO ELIMINADO.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            else
            {
                if (MessageBox.Show("El autorizado a retiro que desea eliminar solo se encuentra asociado\nal parvulo indicado por sistema, por lo que se procederá a\neliminar tanto al autorizado a retiro, como el registro de autorización.\n\n¿Desea continuar con la eliminación del registro señalado?","ELIMINAR REGISTRO.", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    int a = g.GenIDRetiro(int.Parse(tbx_RutNiño.Text), rut);
                    Retiro aux = BEDE.Retiro.Single(c => c.id_retiro == a);
                    BEDE.Retiro.DeleteObject(aux);
                    Autorizado_Retiro aux2 = BEDE.Autorizado_Retiro.Single(c => c.rut == rut);
                    BEDE.Autorizado_Retiro.DeleteObject(aux2);
                    BEDE.SaveChanges();
                    int b = g.GenCodFicha(tbx_RutNiño.Text);
                    LlenarRetirantes(b);
                    MessageBox.Show("El registro indicado fue eliminado correctamente del sistema.", "REGISTRO ELIMINADO.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }
    }
}
